# -*- coding: utf-8 -*-

def posta_in_arrivo():
    left = [db.messaggio_destinatari.on(db.messaggi.id==db.messaggio_destinatari.messaggio_id),
            db.auth_user.on(db.messaggi.auth_user_id==db.auth_user.id)]
    rows = db(db.messaggio_destinatari.auth_user_id==auth.user_id).select(db.messaggi.ALL,
                                                                          db.messaggio_destinatari.ALL,
                                                                          db.auth_user.ALL,
                                                                          left=left,
                                                                          orderby=(~db.messaggi.data_ora))
    return locals()

def posta_inviata():
    left = [db.auth_user.on(db.messaggi.auth_user_id==db.auth_user.id)]
    rows = db(db.messaggi.auth_user_id==auth.user_id).select(db.messaggi.ALL,
                                                             db.auth_user.ALL,
                                                             left=left,
                                                             orderby=(~db.messaggi.data_ora))
    return locals()

def nuovo_messaggio():
    query = (db.auth_user.id.belongs(getUserFriends()))
    form = SQLFORM.factory(Field('soggetto', 'string', required=True, label=T("Soggetto")),
                           Field('auth_user_ids', 'list:int', requires=IS_IN_DB(db(query), db.auth_user.id, '%(last_name)s'+' '+'%(first_name)s', multiple=True), label="Destinatari"),
                           Field('corpo', 'text', required=True, label=T("Corpo")))
    if form.accepts(request.vars, session):
        list_users = form.vars.auth_user_ids
        insert_dict = dict(auth_user_id=auth.user_id,
                           soggetto=form.vars.soggetto,
                           corpo=form.vars.corpo)
        messaggio_id = db.messaggi.insert(**insert_dict)
        for id in list_users:
            db.messaggio_destinatari.insert(**{"messaggio_id":messaggio_id,
                                               "auth_user_id":id,
                                               "is_letto":False})
        session.flash = T("Messaggio inviato.")
        redirect(URL("messaggi", "posta_in_arrivo"))
    return locals()


def visualizza_messaggio():
    messaggio_id = int(request.vars.messaggio_id)
    # Messaggi precedenti
    messaggi_precedenti = []
    parents_id = []    
    parent_id = getParentId(messaggio_id)
    if parent_id!=None:
        parents_id.append(parent_id)        
        while parent_id!=None:
            parent_id = getParentId(parent_id)
            if parent_id!=None:
                parents_id.append(parent_id)
    for messaggio_parent_id in parents_id:
        left = [db.auth_user.on(db.messaggi.auth_user_id==db.auth_user.id)]
        messaggio = db(db.messaggi.id==messaggio_parent_id).select(db.messaggi.ALL,
                                                            db.auth_user.first_name,
                                                            db.auth_user.last_name,
                                                            left=left).first()
        messaggi_precedenti.append(messaggio)
    # Update letto
    db((db.messaggio_destinatari.auth_user_id==auth.user_id)&
       (db.messaggio_destinatari.messaggio_id==messaggio_id)).update(is_letto=True)
    # Selezione messaggio
    left = [db.auth_user.on(db.messaggi.auth_user_id==db.auth_user.id)]
    messaggio = db(db.messaggi.id==messaggio_id).select(db.messaggi.ALL,
                                                        db.auth_user.ALL,
                                                        left=left).first()
    destinatari = getDestinatariMessaggio(messaggio_id)
    form = SQLFORM.factory(Field('soggetto', 'string', required=True, label=T(""), default="RE: %s"%messaggio.messaggi.soggetto),
                           Field('corpo', 'text', required=True, label=T("")),
                           submit_button=T("Rispondi"))
    if form.accepts(request.vars, session):
        # Invio messaggio
        insert_dict = dict()
        insert_dict["auth_user_id"] = auth.user_id
        insert_dict["parent_id"] =  messaggio_id
        insert_dict["soggetto"] = form.vars.soggetto
        insert_dict["corpo"] = form.vars.corpo
        new_messaggio_id = db.messaggi.insert(**insert_dict)
        # Invio destinatari
        list_users = [messaggio.messaggi.auth_user_id]
        for row in db((db.messaggio_destinatari.messaggio_id==messaggio_id)&
                      (db.messaggio_destinatari.auth_user_id!=auth.user_id)).select(db.messaggio_destinatari.auth_user_id):
            list_users.append(row.auth_user_id)
        for auth_user_id in list_users:
            db.messaggio_destinatari.insert(**{"messaggio_id":new_messaggio_id,
                                               "auth_user_id":auth_user_id,
                                               "is_letto":False})
        session.flash = T("Messaggio inviato.")
        redirect(URL("messaggi", "posta_in_arrivo"))            
            
    return locals()
